{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import chipwhisperer as cw\n",
    "\n",
    "try:\n",
    "    if not scope.connectStatus:\n",
    "        scope.con()\n",
    "except NameError:\n",
    "    scope = cw.scope()\n",
    "\n",
    "try:\n",
    "    if SS_VER == \"SS_VER_2_1\":\n",
    "        target_type = cw.targets.SimpleSerial2\n",
    "    elif SS_VER == \"SS_VER_2_0\":\n",
    "        raise OSError(\"SS_VER_2_0 is deprecated. Use SS_VER_2_1\")\n",
    "    else:\n",
    "        target_type = cw.targets.SimpleSerial\n",
    "except:\n",
    "    SS_VER=\"SS_VER_1_1\"\n",
    "    target_type = cw.targets.SimpleSerial\n",
    "\n",
    "try:\n",
    "    target = cw.target(scope, target_type)\n",
    "except:\n",
    "    print(\"INFO: Caught exception on reconnecting to target - attempting to reconnect to scope first.\")\n",
    "    print(\"INFO: This is a work-around when USB has died without Python knowing. Ignore errors above this line.\")\n",
    "    scope = cw.scope()\n",
    "    target = cw.target(scope, target_type)\n",
    "\n",
    "\n",
    "print(\"INFO: Found ChipWhisperer😍\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "if \"STM\" in PLATFORM or PLATFORM == \"CWLITEARM\" or PLATFORM == \"CWNANO\":\n",
    "    prog = cw.programmers.STM32FProgrammer\n",
    "elif PLATFORM == \"CW303\" or PLATFORM == \"CWLITEXMEGA\":\n",
    "    prog = cw.programmers.XMEGAProgrammer\n",
    "elif \"neorv32\" in PLATFORM.lower():\n",
    "    prog = cw.programmers.NEORV32Programmer\n",
    "elif \"SAM4S\" in PLATFORM or PLATFORM == \"CWHUSKY\":\n",
    "    prog = cw.programmers.SAM4SProgrammer\n",
    "else:\n",
    "    prog = None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "time.sleep(0.05)\n",
    "scope.default_setup()\n",
    "\n",
    "def reset_target(scope):\n",
    "    if PLATFORM == \"CW303\" or PLATFORM == \"CWLITEXMEGA\":\n",
    "        scope.io.pdic = 'low'\n",
    "        time.sleep(0.1)\n",
    "        scope.io.pdic = 'high_z' #XMEGA doesn't like pdic driven high\n",
    "        time.sleep(0.1) #xmega needs more startup time\n",
    "    elif \"neorv32\" in PLATFORM.lower():\n",
    "        raise IOError(\"Default iCE40 neorv32 build does not have external reset - reprogram device to reset\")\n",
    "    elif PLATFORM == \"CW308_SAM4S\" or PLATFORM == \"CWHUSKY\":\n",
    "        scope.io.nrst = 'low'\n",
    "        time.sleep(0.25)\n",
    "        scope.io.nrst = 'high_z'\n",
    "        time.sleep(0.25)\n",
    "    else:  \n",
    "        scope.io.nrst = 'low'\n",
    "        time.sleep(0.05)\n",
    "        scope.io.nrst = 'high_z'\n",
    "        time.sleep(0.05)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
